package com.azxcrm.project.system.user.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.azxcrm.project.system.user.domain.User;
import com.azxcrm.project.system.user.domain.UserRole;

/**
 * 用户 业务层
 * 
 * @author Dustyone
 */
public interface IUserService
{
	
	/**
	 * 根据roleKey值查询用户信息
	 * @param roleKey
	 * @return
	 */
	List<UserRole> selectUserByRoleKey(String roleKey);
	
	/**
	 * 根据roleKey值查询用户信息,封装入参
	 * @param roleKey
	 * @return
	 */
	List<UserRole> selectUserByRoleKeyByParam(String roleKey,Integer deptId);
	
	
    /**
     * 根据条件分页查询用户对象
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
     List<User> selectUserList(User user);

    /**
     * 根据条件用户名和手机号查询业务员对象
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
     public List<User> selectUser(User user);
     
    /**
     * 通过用户名查询用户
     * 
     * @param userName 用户名
     * @return 用户对象信息
     */
     User selectUserByName(String userName);

    /**
     * 通过用户ID查询用户
     * 
     * @param userId 用户ID
     * @return 用户对象信息
     */
     User selectUserById(Long userId);

    /**
     * 通过用户ID删除用户
     * 
     * @param userId 用户ID
     * @return 结果
     */
     int deleteUserById(Long userId);
     
     /**
      * 通过deptId获取该部门下所有用户信息
      * @param dept
      * @return 部门对象信息
      */
     List<User> selectUserByDeptId(Long deptId);
     
     /**
      * 通过order获取重复订单不重复派单业务员
      * @param dept
      * @return 部门对象信息
      */
     List<User> selectUserByOrder(Integer orderId,Integer deptId,String role);

    /**
     * 批量删除用户信息
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
     int batchDeleteUser(Long[] ids);

    /**
     * 保存用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
     int saveUser(User user);
    
    /**
     * 修改用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
     int updateUser(User user);
     
     /**
      * 根据用户登陆名修改该用户该次登陆来源
      * @param user
      * @return
      */
     int updateUserByLoginName(User user);
    
    /**
     * 修改用户密码信息
     * 
     * @param user 用户信息
     * @return 结果
     */
     int resetUserPwd(User user);

    /**
     * 校验用户名称是否唯一
     * 
     * @param loginName 登录名称
     * @return 结果
     */
     String checkUserNameUnique(String loginName);

    /**
     * 根据用户ID查询用户所属角色组
     * 
     * @param userId 用户ID
     * @return 结果
     */
     String selectUserRoleGroup(Long userId);

    /**
     * 根据用户ID查询用户所属岗位组
     * 
     * @param userId 用户ID
     * @return 结果
     */
     String selectUserPostGroup(Long userId);
     
     /**
 	 * 根据用户id查询当前用户信息
 	 * @param userId
 	 * @return
 	 */
 	 User selectUserByUserId(Integer userId);
 	 
 	/**
 	 * 根据条件用户名,手机号和业务员权限查询业务员对象
 	 * @param role
 	 * @return
 	 */
 	List<User> selectUserBySalesman(@Param("phonenumber")String phonenumber,@Param("role")String role);
}
